/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ordenar;

import persistencia.RegisterFile;

/**
 *
 * @author Ivan
 */
public class RadixSort implements MethodOrder{

    public boolean ordenar(RegisterFile reg) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


public Radix(int[] d)
    {   data=d;
    }

    public void radixSort()
    {   operaciones=0;

        int digits=10;
        int radix=10;
        Cola<Integer>[] cola=new Cola[radix];

        for(int d=0;d<radix;d++)
        {operaciones++;// por el for()

            cola[d]=new Cola();operaciones++;//por la cola
        }

        for(int d=1, factor=1; d<=digits ; factor*=radix , d++)
        {   operaciones++;// por el for()
            for(int j=0;j<data.length;j++)
            {   operaciones++;// por el for()
                cola[(data[j]/factor)%radix].add(data[j]);operaciones++;//por la cola
            }
            for(int j=0, k=0;j<radix;j++)
            {   operaciones++;//por el for()
                operaciones++;//por el while()
                while(!cola[j].isEmpty())
                {
                    data[k++]=cola[j].removeFirst();operaciones++;//por la cola
                    operaciones++;//por while
                }
            }
        }
    }

    public void bitradixSort( )
    {   int bits=32;
        int mask=1;
        Cola<Integer>[] cola=new Cola[2];
        cola[0]=new Cola();
        cola[1]=new Cola();
        for(int d=1; d<=bits ;  d++)
        {   for(int j=0;j<data.length;j++)
                cola[(data[j]& mask)==0?0:1].add(data[j]);
            mask<<=1;
            int k=0;
            while(!cola[0].isEmpty())
                data[k++]=cola[0].removeFirst();
            while(!cola[1].isEmpty())
                data[k++]=cola[1].removeFirst();
        }
    }

}
